69. x 的平方根

69. x 的平方根

Similar Question

Solution Tips

方案一: 二分搜索

题目

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。

实现

  /**
   * @param {number} x
   * @return {number}
   */
  var mySqrt = function(x) {
    if(x<=1) return x
      let ans = 0
    let left=1,right=x
    let mid = 0
    while(left<=right){
      mid = (left+right) >>> 1
      if(mid**2 <= x){
        // 要增大
        left = mid + 1
        ans = mid
      }else{
        // 要变小
        right = mid -1
      }
    }
    return ans
  }

根据经验 right=x>>>1

模板实现

var mySqrt = function (x) {
    if (x == 0) return 0
    // 区间是1开始,要考虑特例0
    let left = 1, right = x >>> 1
    let mid = 0
    while (left < right) {
        mid = (left + right + 1) >>> 1
        if (mid ** 2 > x) {
            // 要变小,右,选择右中位数
            right = mid - 1
        } else {
            // 要增大
            left = mid
        }
    }
    return left || right
}